iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0

Priority Queue

主要特性

Priority Queue(優先隊列)是一個特別的資料結構,主要用於管理一組有序的元素。這些元素根據其優先級進行排序,而不是插入的時間或其他條件。這一特性讓它在如排程、搜索算法和數據壓縮等多種情境下非常有用。

將其具體化,想像你正在機場的登機口等待登機。乘客會根據各種優先級(例如頭等艙、商務艙、普通艙)來優先登機。在這裡,重要的不是誰先到達機場,而是誰的優先級更高。

基本操作

一個常見的 Priority Queue 支持以下操作:

  • INSERT(element, priority):根據指定的優先級將元素插入到 Priority Queue。
  • DELETE_MIN() 或 DELETE_MAX():移除具有最小(或最大)優先級的元素。
  • GET_MIN() 或 GET_MAX():查詢具有最小(或最大)優先級的元素,但不進行移除。
  • IsEmpty():檢查 Priority Queue 是否為空。

Priority Queue 的應用

由於 Priority Queue 可以快速地進行基於優先級的排序和取出,它在以下情境中是非常有用的:

  • 任務排程:比如作業系統可能會用它來確定哪個進程(程序)應該先被執行。
  • 圖形演算法:如 Dijkstra's 和 A*,用於快速找出最短路徑。
  • 數據流管理:如網絡流量的控制,優先處理高優先級的數據包。
  • 資料壓縮:如 Huffman 編碼算法。

數學和演算法背景

在實作 Priority Queue 時,一般會使用如二叉堆(Binary Heap)或 Fibonacci 堆(Fibonacci Heap)等數據結構。這些不同的實作有其各自的時間複雜度,通常:

  • INSERT:O(log n)
  • DELETE_MIN 或 DELETE_MAX:O(log n)
  • GET_MIN 或 GET_MAX:O(1)

上一篇
Day 27 群星歸位...永恆的海底...資結升起...萬物歸四
下一篇
Day 29 群星歸位...永恆的海底...資結升起...萬物歸七
系列文
CS補完計畫—演算法與資料結構的第三次衝擊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言